package cn.pupil.springframework.beans.factory.config;

import cn.pupil.springframework.beans.factory.HierarchicalBeanFactory;
import cn.pupil.springframework.core.convert.ConversionService;
import cn.pupil.springframework.util.StringValueResolver;
import com.sun.istack.internal.Nullable;

/**
 * @Description: 配置化Bean工厂接口
 * @Author: pupil
 * @Date: 2024/11/4 下午 8:38
 */
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry {

    // Bean的作用范围——单例
    String SCOPE_SINGLETON = "singleton";

    // Bean的作用范围——原型
    String SCOPE_PROTOTYPE = "prototype";

    /**
     * 添加Bean后置处理器
     *
     * @param beanPostProcessor
     */
    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);

    /**
     * 执行销毁单例的销毁方法
     */
    void destroySingletons();

    /**
     * 为嵌入式值（如注释属性）添加字符串解析器。
     *
     * @param valueResolver 应用于嵌入值的字符串解析器
     * @since 3.0
     */
    void addEmbeddedValueResolver(StringValueResolver valueResolver);

    /**
     * 解析给定的嵌入值，例如注释属性。
     *
     * @param value 要解析的值
     * @return 解析值（可能是原始值）
     * @since 3.0
     */
    String resolveEmbeddedValue(String value);

    /**
     * 指定用于转换的Spring 3.0 ConversionService
     * 属性值，作为JavaBeans PropertyEditors的替代方案。
     * @since 3.0
     */
    void setConversionService(ConversionService conversionService);

    /**
     * 返回所有关联的ConversionService
     *
     * @since 3.0
     */
    @Nullable
    ConversionService getConversionService();
}
